Datos auxiliares
Para realizar conversiones a dolares de poder adquisitivo constante cargamos los datos del tipo de cambio de paridad (actualizado hasta 2018) y el Ãndice de precios al consumidor de Estados Unidos.
#TC
tcp_arg <- as.data.table(read_excel("../resultados/argentina/renta_de_la_tierra_hidrocarburifera_arg.xlsx", sheet = "tipo_cambio"))
tcp_arg = tcp_arg[,!c("sv", "fuente"), with = F]
#IPC Arg
ipc_arg <- as.data.table(read_csv("../data/indices/ipc_annual_avg.csv"))
#CPI EEUU
ipc_us <- as.data.table(read_csv("../data/bls/cpi.csv"))
setnames(ipc_us,"Year", "anio" )
ipc_us = ipc_us[, .(ipc_us_20 = mean(Value, na.rm=T)), by = anio]
ipc_us[, ipc_us_20 := generar_indice(serie = ipc_us_20,
fecha = anio, fecha_base = 2020)]
Costos
\[Q\_total = Q_{petróleo} + Q_{gas} \] Donde:
- \(Q\_total\) = Cantidades producidas de petróleo y gas en Barriles Equivalentes de Petróleo
- \(Q_{petróleo}\) = Cantidades producidas de petróleo crudo en barriles equivalentes de petróleo (BOE)
- \(Q_{gas}\) = Cantidades producidas de gas natural en barriles equivalentes de petróleo (BOE)
\[ Costos\_totales = CI + MS + ConKfijo\]
Donde:
- \(Costos\_totales\) = Costos totales hidrocarburÃferos
- \(CI\) = Consumo Intermedio, distintas estimaciones
- \(MS\) = Masa Salarial, distintas estimaciones
- \(ConKfijo\) = Consumo de Capital Fijo
\[Costos\_totales\_con\_Gcia = Costos\_totales + Gcia\_Normal_{hidrocarburÃfera} \] Donde:
- \(Costos\_totales\_con\_Gcia\) = Costos totales hidrocarburÃferos con ganancia normal
- \(Gcia\_Normal_{hidrocarburÃfera}\) = Ganancia normal del sector hidrocarburÃfero
\[ Precio\_costo = \frac{Costos\_totales}{Q\_total} \] Donde: * \(Precio\_costo\) = Precio de costo en BOE
A partir de esto se puede calcular un costo recuperable del petróleo y del gas
\[Costo\_crudo = Q_{petróleo} * Precio\_costo\] \[Costo\_gas = Q_{gas} * Precio\_costo\]
\[Precio\_produccion = \frac{Costos\_totales\_con\_Gcia}{Q\_total}\]
\[Precio\_vta\_potencial = \frac{Q\_total*Pext_{petróleo} - Costos\_totales}{Q\_total} \]
Donde: * \(Precio\_produccion\)= Precio de produccion * \(Precio_vta_potencial\) = Precio de venta potencial * \(Pext_{petróleo}\) = Precio de exportación/referencia internacional del petróleo crudo
costos <- read_excel("../resultados/argentina/renta_de_la_tierra_hidrocarburifera_arg.xlsx", sheet = "costos_pg_ccnn")
costos %>%
filter(anio > 1997) %>%
ggplot(aes(anio, Pcost, color = fuente))+
geom_line(alpha = 0.5, size = 1.4)+
labs(title = "Precio de costo",
subtitle= "Estimacion propia a partir de CCNN y reestimacion de VBP con criterio CCNN",
y = "USD/BOE", x = "Año")

Inversiones
Inversiones comprometidas
Metros y pozos perforados
Stock invertido
Activos
Pasar datos de bs de uso en yacimientos para armar relación activo yacimeinto/total
Fuentes: * Balances de Bolsar (unicamente empresas que cotizan en la bolsa de valores argentina). Revisar el stock del sector distribución porque se presenta demasiado grande con respecto al de los demás. Falta pasar los datos del activo de casi todas las empresas * AFIP. Con esta fuente no tenemos calculo de renta, sino que solo usamos la TG como parámetro. Nota: "_c" significa casos presentados de la variable correspondiente * Memorias de YPF. La década de los 80 presenta picos que hay que revisar
# write.csv(stock_rama, file ="/Archivos/Datos/Stock/stock_hidrocarburos.csv")
Stock de segmentos de YPF y Petrobras
YPF largo plazo
Comparación entre la Memoria YPF (recopilado por BFR) y los balances extrÃados de Bolsar
# PENSAR ALGO ASI PERO MAS ACEPTABLE
# graf_stock_rama <- stock_rama %>%
# # mutate(valor = number_format(valor, big.mark = " " )) %>%
# filter(sector != "distribucion") %>%
# ggplot(aes(anio, valor, color = sector, shape = fuente))+
# geom_line()+
# geom_point(size = .8)+
# theme(legend.position = "bottom")+
# labs(title = "Stock de capital adelantado y activo de segmentos",
# subtitle = "Subsectores del sector hidrocarburÃfero",
# y = "Millones de pesos de 2018")+
# theme_classic()+
# facet_wrap(~ variable )
#
# ggplotly(graf_stock_rama, width = 800, height = 400)
Pasivos
Ratio de endeudamiento
ExtraÃdo de la visualización de NOC’s (ref) \[ Endeudamiento = \frac{Pasivo}{Patrimonio Neto} \]
nocs_df = fread( "../resultados/comparacion_paises/nocs.csv")
plt_endeu <- nocs_df %>%
ggplot(aes(year, ratio_endeudamiento ,group = year))+
geom_boxplot() +
# geom_point(aes(color = company))+
# geom_line(aes(group = company))+
geom_line(data = nocs_df %>% filter(company == "PDVSA"),
aes(year, ratio_endeudamiento,color = "PDVSA", group = company), size = 1)+
geom_line(data = nocs_df %>% filter(company == "YPF"),
aes(year, ratio_endeudamiento,color = "YPF", group = company), size = 1)+
scale_color_manual(name = "Empresa",
labels = c("PDVSA", "YPF"),
values = c( "brown4", "blue1"))+
# values = c("PDVSA" = "red", "YPF" = "blue"))+
theme(legend.position = "bottom")+
labs(title = "Ratio de endeudamiento de NOC's", x = "", y="",
subtitle = "YPF y PDVSA frente al resto de la distribución")+
ylim(-3, 5 )
plt_endeu

Rentabilidad
\[TG_{hidrocarburos} = \frac{PV_{hidrocarburÃfera}}{KTA_{hidrocarburÃfero}}\]
Total
tasa_ganancia_rama_stock = read_excel("../resultados/argentina/renta_de_la_tierra_hidrocarburifera_arg.xlsx", sheet = "tg_pg_total")
# tasa de ganancia
graf_tg_rama_2 <- tasa_ganancia_rama_stock %>%
filter(anio >1995) %>%
ggplot(aes(anio, TG_pg, color = stock_seleccionado))+
geom_line(aes(anio, TG_manuf))+
geom_line(alpha = 0.5)+
geom_point()+
scale_y_continuous(labels = scales::percent)+
theme(axis.text.x = element_text(angle = 90),
legend.position = "bottom")
plot_ggplotly(graf_tg_rama_2 ,
title = "Tasa de ganancia hidrocarburÃfera con PPyE a partir de stock de pozos (1960 - 2018)")
Por subsector
tg_x_sector = balances_arg %>%
# filter(unidad == "Millones de pesos") %>%
filter(unidad == "Millones de pesos") %>%
group_by(fecha, sector) %>%
summarise("TG antes de impuestos" = sum(gcia_ant,na.rm = T)/sum (KTA,na.rm = T),
"TG despues de impuestos" = sum(gcia_ant, impuesto_gcia, na.rm = T)/sum(KTA, na.rm = T ) ) %>%
gather(key = variable, value = valor, 3:4) %>%
filter(variable =="TG despues de impuestos") %>%
ggplot(aes(fecha, valor, color = sector))+
geom_line()+
geom_point()+
geom_hline(yintercept = 0)+
scale_y_continuous(labels = scales::percent)+
theme(axis.text.x = element_text(angle = 90))+
facet_wrap(~variable)
`summarise()` has grouped output by 'fecha'. You can override using the `.groups` argument.
plot_ggplotly(tg_x_sector,title = "Tasa de ganancia empresas hidrocarburos",
subtitle = "Antes y después de impuestos" )
Segmentos YPF y Petrobras

graf_tg_petrobras <- petrobras_ar_seg %>%
filter(sector %in% c("petroquimica", "downstream", "upstream", "gas_y_energia")) %>%
# filter(sector != "adm_central") %>%
ggplot(aes(fecha, tg, color = sector))+
geom_line()+
# facet_wrap(~sector)+
scale_y_continuous(labels = scales::percent)+
theme(axis.text.x = element_text(angle = 90))+
labs(title = "Tasa de ganancia de segmentos Petrobras Argentina")
graf_tg_petrobras

LS0tDQp0aXRsZTogIkNvc3RvcywgaW52ZXJzaW9uZXMgeSByZW50YWJpbGlkYWQiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCiNsaW1waWV6YSBkZSBtZW1vcmlhDQpybShsaXN0ID1scygpKQ0KZ2MoKQ0KDQojIGNvbmZpZ3VyYWNpw7NuIGRlIGltcHJlc2nDs24NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCm9wdGlvbnMod2FybiA9IC0xLCBtZXNzYWdlID0gLTEpIA0KDQoNCiMgYmlibGlvdGVjYXMNCmxpYnJhcnkoZGF0YS50YWJsZSkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShyZWFkeGwpDQpzb3VyY2UoImZ1bmN0aW9uZXNfaGlkcm9jYXJidXJvcy5SIikNCg0KIyBwYXLDoW1ldHJvcyBwYXJhIGxvcyBncmFmaWNvcw0KYWxwaGFfbiA9IDAuNw0KYGBgDQoNCg0KDQojIERhdG9zIGF1eGlsaWFyZXMNClBhcmEgcmVhbGl6YXIgY29udmVyc2lvbmVzIGEgZG9sYXJlcyBkZSBwb2RlciBhZHF1aXNpdGl2byBjb25zdGFudGUgY2FyZ2Ftb3MgbG9zIGRhdG9zIGRlbCB0aXBvIGRlIGNhbWJpbyBkZSBwYXJpZGFkIChhY3R1YWxpemFkbyBoYXN0YSAyMDE4KSB5IGVsIMOtbmRpY2UgZGUgcHJlY2lvcyBhbCBjb25zdW1pZG9yIGRlIEVzdGFkb3MgVW5pZG9zLiANCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojVEMNCnRjcF9hcmcgPC0gYXMuZGF0YS50YWJsZShyZWFkX2V4Y2VsKCIuLi9yZXN1bHRhZG9zL2FyZ2VudGluYS9yZW50YV9kZV9sYV90aWVycmFfaGlkcm9jYXJidXJpZmVyYV9hcmcueGxzeCIsIHNoZWV0ID0gInRpcG9fY2FtYmlvIikpIA0KdGNwX2FyZyA9IHRjcF9hcmdbLCFjKCJzdiIsICJmdWVudGUiKSwgd2l0aCA9IEZdDQoNCiNJUEMgQXJnDQppcGNfYXJnIDwtIGFzLmRhdGEudGFibGUocmVhZF9jc3YoIi4uL2RhdGEvaW5kaWNlcy9pcGNfYW5udWFsX2F2Zy5jc3YiKSkNCg0KI0NQSSBFRVVVDQppcGNfdXMgPC0gYXMuZGF0YS50YWJsZShyZWFkX2NzdigiLi4vZGF0YS9ibHMvY3BpLmNzdiIpKSANCnNldG5hbWVzKGlwY191cywiWWVhciIsICJhbmlvIiAgKQ0KaXBjX3VzID0gaXBjX3VzWywgLihpcGNfdXNfMjAgPSBtZWFuKFZhbHVlLCBuYS5ybT1UKSksIGJ5ID0gYW5pb10NCmlwY191c1ssIGlwY191c18yMCA6PSBnZW5lcmFyX2luZGljZShzZXJpZSA9IGlwY191c18yMCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWNoYSA9IGFuaW8sIGZlY2hhX2Jhc2UgPSAyMDIwKV0NCmBgYA0KDQoNCiMgQ29zdG9zDQoNCiQkUVxfdG90YWwgPSBRX3twZXRyw7NsZW99ICsgUV97Z2FzfSAkJA0KRG9uZGU6DQogIA0KICAqICRRXF90b3RhbCQgPSBDYW50aWRhZGVzIHByb2R1Y2lkYXMgZGUgcGV0csOzbGVvIHkgZ2FzIGVuIEJhcnJpbGVzIEVxdWl2YWxlbnRlcyBkZSBQZXRyw7NsZW8NCiAgKiAkUV97cGV0csOzbGVvfSQgPSBDYW50aWRhZGVzIHByb2R1Y2lkYXMgZGUgcGV0csOzbGVvIGNydWRvIGVuIGJhcnJpbGVzIGVxdWl2YWxlbnRlcyBkZSBwZXRyw7NsZW8gKEJPRSkNCiAgKiAkUV97Z2FzfSQgPSBDYW50aWRhZGVzIHByb2R1Y2lkYXMgZGUgZ2FzIG5hdHVyYWwgZW4gYmFycmlsZXMgZXF1aXZhbGVudGVzIGRlIHBldHLDs2xlbyAoQk9FKQ0KICANCg0KJCQgQ29zdG9zXF90b3RhbGVzID0gIENJICsgTVMgKyBDb25LZmlqbyQkDQoNCkRvbmRlOg0KDQoqICRDb3N0b3NcX3RvdGFsZXMkID0gQ29zdG9zIHRvdGFsZXMgaGlkcm9jYXJidXLDrWZlcm9zDQoqICRDSSQgPSBDb25zdW1vIEludGVybWVkaW8sIGRpc3RpbnRhcyBlc3RpbWFjaW9uZXMNCiogJE1TJCA9IE1hc2EgU2FsYXJpYWwsIGRpc3RpbnRhcyBlc3RpbWFjaW9uZXMNCiogJENvbktmaWpvJCA9IENvbnN1bW8gZGUgQ2FwaXRhbCBGaWpvDQoNCg0KJCRDb3N0b3NcX3RvdGFsZXNcX2NvblxfR2NpYSA9IENvc3Rvc1xfdG90YWxlcyArIEdjaWFcX05vcm1hbF97aGlkcm9jYXJidXLDrWZlcmF9ICQkDQpEb25kZToNCg0KKiAkQ29zdG9zXF90b3RhbGVzXF9jb25cX0djaWEkID0gQ29zdG9zIHRvdGFsZXMgaGlkcm9jYXJidXLDrWZlcm9zIGNvbiBnYW5hbmNpYSBub3JtYWwgDQoqICRHY2lhXF9Ob3JtYWxfe2hpZHJvY2FyYnVyw61mZXJhfSQgPSBHYW5hbmNpYSBub3JtYWwgZGVsIHNlY3RvciBoaWRyb2NhcmJ1csOtZmVybw0KDQokJCBQcmVjaW9cX2Nvc3RvID0gXGZyYWN7Q29zdG9zXF90b3RhbGVzfXtRXF90b3RhbH0gICAkJA0KRG9uZGU6DQoqICRQcmVjaW9cX2Nvc3RvJCA9IFByZWNpbyBkZSBjb3N0byBlbiBCT0UNCg0KQSBwYXJ0aXIgZGUgZXN0byBzZSBwdWVkZSBjYWxjdWxhciB1biBjb3N0byByZWN1cGVyYWJsZSBkZWwgcGV0csOzbGVvIHkgZGVsIGdhcw0KDQokJENvc3RvXF9jcnVkbyA9IFFfe3BldHLDs2xlb30gKiBQcmVjaW9cX2Nvc3RvJCQNCiQkQ29zdG9cX2dhcyA9IFFfe2dhc30gKiBQcmVjaW9cX2Nvc3RvJCQNCg0KDQokJFByZWNpb1xfcHJvZHVjY2lvbiA9IFxmcmFje0Nvc3Rvc1xfdG90YWxlc1xfY29uXF9HY2lhfXtRXF90b3RhbH0kJA0KDQokJFByZWNpb1xfdnRhXF9wb3RlbmNpYWwgPSAgXGZyYWN7UVxfdG90YWwqUGV4dF97cGV0csOzbGVvfSAtIENvc3Rvc1xfdG90YWxlc317UVxfdG90YWx9ICQkDQoNCg0KRG9uZGU6DQoqICRQcmVjaW9cX3Byb2R1Y2Npb24kPSBQcmVjaW8gZGUgcHJvZHVjY2lvbg0KKiAkUHJlY2lvX3Z0YV9wb3RlbmNpYWwkID0gUHJlY2lvIGRlIHZlbnRhIHBvdGVuY2lhbA0KKiAkUGV4dF97cGV0csOzbGVvfSQgPSBQcmVjaW8gZGUgZXhwb3J0YWNpw7NuL3JlZmVyZW5jaWEgaW50ZXJuYWNpb25hbCBkZWwgcGV0csOzbGVvIGNydWRvDQoNCmBgYHtyfQ0KY29zdG9zIDwtIHJlYWRfZXhjZWwoIi4uL3Jlc3VsdGFkb3MvYXJnZW50aW5hL3JlbnRhX2RlX2xhX3RpZXJyYV9oaWRyb2NhcmJ1cmlmZXJhX2FyZy54bHN4Iiwgc2hlZXQgPSAiY29zdG9zX3BnX2Njbm4iKSANCg0KY29zdG9zICU+JQ0KICAgICAgICAgICBmaWx0ZXIoYW5pbyA+IDE5OTcpICU+JQ0KICBnZ3Bsb3QoYWVzKGFuaW8sIFBjb3N0LCBjb2xvciA9IGZ1ZW50ZSkpKw0KICBnZW9tX2xpbmUoYWxwaGEgPSAwLjUsIHNpemUgPSAxLjQpKw0KICAgIGxhYnModGl0bGUgPSAiUHJlY2lvIGRlIGNvc3RvIiwNCiAgICAgICAgIHN1YnRpdGxlPSAiRXN0aW1hY2lvbiBwcm9waWEgYSBwYXJ0aXIgZGUgQ0NOTiB5IHJlZXN0aW1hY2lvbiBkZSBWQlAgY29uIGNyaXRlcmlvIENDTk4iLA0KICAgICAgICAgeSA9ICJVU0QvQk9FIiwgeCA9ICJBw7FvIikNCg0KYGBgDQoNCiMgSW52ZXJzaW9uZXMNCg0KIyMgSW52ZXJzaW9uZXMgY29tcHJvbWV0aWRhcw0KDQojIyBNZXRyb3MgeSBwb3pvcyBwZXJmb3JhZG9zDQoNCiMgU3RvY2sgaW52ZXJ0aWRvDQojIyBBY3Rpdm9zDQpQYXNhciBkYXRvcyBkZSBicyBkZSB1c28gZW4geWFjaW1pZW50b3MgcGFyYSBhcm1hciByZWxhY2nDs24gYWN0aXZvIHlhY2ltZWludG8vdG90YWwNCg0KRnVlbnRlczoNCiogQmFsYW5jZXMgZGUgQm9sc2FyICh1bmljYW1lbnRlIGVtcHJlc2FzIHF1ZSBjb3RpemFuIGVuIGxhIGJvbHNhIGRlIHZhbG9yZXMgYXJnZW50aW5hKS4gUmV2aXNhciBlbCBzdG9jayBkZWwgc2VjdG9yIGRpc3RyaWJ1Y2nDs24gcG9ycXVlIHNlIHByZXNlbnRhIGRlbWFzaWFkbyBncmFuZGUgY29uIHJlc3BlY3RvIGFsIGRlIGxvcyBkZW3DoXMuIEZhbHRhIHBhc2FyIGxvcyBkYXRvcyBkZWwgYWN0aXZvIGRlIGNhc2kgdG9kYXMgbGFzIGVtcHJlc2FzDQoqIEFGSVAuIENvbiBlc3RhIGZ1ZW50ZSBubyB0ZW5lbW9zIGNhbGN1bG8gZGUgcmVudGEsIHNpbm8gcXVlIHNvbG8gdXNhbW9zIGxhIFRHIGNvbW8gcGFyw6FtZXRyby4gTm90YTogIl9jIiBzaWduaWZpY2EgY2Fzb3MgcHJlc2VudGFkb3MgZGUgbGEgdmFyaWFibGUgY29ycmVzcG9uZGllbnRlDQoqIE1lbW9yaWFzIGRlIFlQRi4gTGEgZMOpY2FkYSBkZSBsb3MgODAgcHJlc2VudGEgcGljb3MgcXVlIGhheSBxdWUgcmV2aXNhcg0KDQoNCiogQ2FsY3VsbyBkZWwgQ2FwaXRhbCBUb3RhbCBBZGVsYW50YWRvIChLVEEpIA0KDQogICsgQm9sc2FyOiBFcyBlcXVpdmFsZW50ZSBhIGxhIHN1bWEgZGUgUHJvcGllZGFkLCBQbGFudGEgeSBFcXVpcG9zIE5ldGEgKGRlc2NvbnRhbmRvIGxvcyB0ZXJyZW5vcyB5IG9icmFzIGVuIGN1cnNvKSB5IGxvcyBJbnZlbnRhcmlvcy4gQ3VhbmRvIGxvcyBkYXRvcyBsbyBoYWJpbGl0YW4sIHNlIGxlIGFncmVnw7MgbG9zIHNhbGFyaW9zIGFkZWxhbnRhZG9zIChzYWxhcmlvcyB5IGNhcmdhcyBjb25zdW1pZG9zIHNvYnJlIHJvdGFjacOzbikuIEx1ZWdvLCBjdWFuZG8gbm8gc2UgcHJlc2VudGFyb24gZGF0b3MgZGUgUHJvcGllZGFkLCBQbGFudGEgeSBFcXVpcG9zLCBzZSB0b23DsyBlbCBhY3Rpdm8gbm8gY29ycmllbnRlLg0KICArIEFGSVA6IEVzIGVxdWl2YWxlbnRlIGEgbGEgc3VtYSBkZSBCaWVuZXMgZGUgVXNvLCBCaWVuZXMgZGUgQ2FtYmlvLCBJbnZlbnRhcmlvcyB5IERpc3BvbmliaWxpZGFkZXMuDQogICsgTWVtb3JpYSBZUEY6IFN1bWEgZGUgQmllbmVzIGRlIFVzbyB5IEJpZW5lcyBkZSBDYW1iaW8NCg0KYGBge3J9DQojIHdyaXRlLmNzdihzdG9ja19yYW1hLCBmaWxlID0iL0FyY2hpdm9zL0RhdG9zL1N0b2NrL3N0b2NrX2hpZHJvY2FyYnVyb3MuY3N2IikNCmBgYA0KDQoNCiMjIyBTdG9jayBkZSBzZWdtZW50b3MgZGUgWVBGIHkgUGV0cm9icmFzDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0Kc3RvY2tfc2VnbWVudG9zID0gZnJlYWQoIi4uL3Jlc3VsdGFkb3MvYXJnZW50aW5hL2Jhc2VfY3N2L3N0b2NrX3NlZ21lbnRvcy5jc3YiKQ0KZ3JhZl9zdG9ja19zZWdtZW50b3MgPC0gc3RvY2tfc2VnbWVudG9zICU+JQ0KICBsZWZ0X2pvaW4odGNwX2FyZywgYnk9ICJhbmlvIikgJT4lIA0KICBnZ3Bsb3QoYWVzKGFuaW8sIHZhbG9yL1RDYywgY29sb3IgPSBzZWN0b3IpKSsNCiAgZ2VvbV9saW5lKCkrDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSsNCiAgbGFicyh5ID0gIk1pbGxvbmVzIGRlIGTDs2xhcmVzIGNvcnJpZW50ZXMiKSsNCiAgdGhlbWVfY2xhc3NpYygpKw0KICBmYWNldF93cmFwKHZhcmlhYmxlIH4gZW1wcmVzYSAsIHNjYWxlcyA9ICJmcmVlIikNCg0KcGxvdF9nZ3Bsb3RseShncmFmX3N0b2NrX3NlZ21lbnRvcyx0aXRsZSA9ICJTdG9jayBkZSBjYXBpdGFsIGRlIHNlZ21lbnRvcyIsDQogICAgICAgc3VidGl0bGUgPSAiWVBGIHkgUGV0cm9icmFzIEFyZ2VudGluYSIpDQpgYGANCg0KIyMjIFN0b2NrIHBvciBlbXByZXNhcw0KDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0Kc3RvY2tfYmFsYW5jZXNfZW1wcmVzYXMgPSBmcmVhZCgiLi4vcmVzdWx0YWRvcy9hcmdlbnRpbmEvYmFzZV9jc3Yvc3RvY2tfYmFsYW5jZXNfZW1wcmVzYXMuY3N2IikNCmdyYWZfc3RvY2tfZW1wIDwtIHN0b2NrX2JhbGFuY2VzX2VtcHJlc2FzICU+JQ0KICBmaWx0ZXIoDQogICAgIyB2YXJpYWJsZSAlaW4lIGMoIktUQSIsICJhY3Rpdm8iKSwNCiAgICAgICAgIHNlY3RvciAhPSAiZGlzdHJpYnVjaW9uIikgJT4lDQogIGdncGxvdChhZXMoYW5pbywgdmFsb3IsIGNvbG9yID0gZW1wcmVzYSkpKw0KICBnZW9tX2xpbmUoKSsNCiAgZ2VvbV9wb2ludCgpKw0KICBsYWJzKCB5ID0gIk1pbGxvbmVzIGRlIHBlc29zIGRlIDIwMTgiKSsNCiAgZmFjZXRfd3JhcCh+dmFyaWFibGUpDQoNCnBsb3RfZ2dwbG90bHkoZ3JhZl9zdG9ja19lbXAsIHRpdGxlID0gIlN0b2NrIGRlIGNhcGl0YWwgcG9yIGVtcHJlc2EiKQ0KDQpgYGANCg0KIyMjIFlQRiBsYXJnbyBwbGF6bw0KQ29tcGFyYWNpw7NuIGVudHJlIGxhIE1lbW9yaWEgWVBGIChyZWNvcGlsYWRvIHBvciBCRlIpIHkgbG9zIGJhbGFuY2VzIGV4dHLDrWFkb3MgZGUgQm9sc2FyDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0Kc3RvY2tfeXBmID0gZnJlYWQoICIuLi9yZXN1bHRhZG9zL2FyZ2VudGluYS9iYXNlX2Nzdi9zdG9ja195cGYuY3N2IikNCmdyYWZfc3RvY2tfeXBmIDwtICBzdG9ja195cGYgJT4lDQogIGdncGxvdChhZXMoYW5pbywgdmFsb3IsIGNvbG9yID0gc2VjdG9yKSkrDQogIGdlb21fbGluZSgpKw0KICBnZW9tX3BvaW50KCkrDQogIGxhYnMoeSA9ICJNaWxsb25lcyBkZSBwZXNvcyBkZSAyMDE4IikrDQogIGZhY2V0X3dyYXAofnZhcmlhYmxlLCBuY29sID0gMSwgc2NhbGVzID0gImZyZWUiKQ0KcGxvdF9nZ3Bsb3RseShncmFmX3N0b2NrX3lwZiwgdGl0bGUgPSAiU3RvY2sgZGUgY2FwaXRhbCBkZSBZUEYiKQ0KDQpgYGANCmBgYHtyfQ0KDQojIFBFTlNBUiBBTEdPIEFTSSBQRVJPIE1BUyBBQ0VQVEFCTEUgDQojIGdyYWZfc3RvY2tfcmFtYSA8LSBzdG9ja19yYW1hICU+JQ0KIyAgICMgbXV0YXRlKHZhbG9yID0gbnVtYmVyX2Zvcm1hdCh2YWxvciwgYmlnLm1hcmsgPSAiICIgKSkgJT4lDQojICAgZmlsdGVyKHNlY3RvciAhPSAiZGlzdHJpYnVjaW9uIikgJT4lDQojICAgZ2dwbG90KGFlcyhhbmlvLCB2YWxvciwgY29sb3IgPSBzZWN0b3IsIHNoYXBlID0gZnVlbnRlKSkrDQojICAgZ2VvbV9saW5lKCkrDQojICAgZ2VvbV9wb2ludChzaXplID0gLjgpKw0KIyAgIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSsNCiMgICBsYWJzKHRpdGxlID0gIlN0b2NrIGRlIGNhcGl0YWwgYWRlbGFudGFkbyB5IGFjdGl2byBkZSBzZWdtZW50b3MiLA0KIyAgICAgICAgc3VidGl0bGUgPSAiU3Vic2VjdG9yZXMgZGVsIHNlY3RvciBoaWRyb2NhcmJ1csOtZmVybyIsDQojICAgICAgICB5ID0gIk1pbGxvbmVzIGRlIHBlc29zIGRlIDIwMTgiKSsNCiMgICB0aGVtZV9jbGFzc2ljKCkrDQojICAgZmFjZXRfd3JhcCh+IHZhcmlhYmxlICkNCiMgDQojIGdncGxvdGx5KGdyYWZfc3RvY2tfcmFtYSwgd2lkdGggPSA4MDAsIGhlaWdodCA9IDQwMCkNCmBgYA0KDQoNCiMjIFBhc2l2b3MNCiMjIyBSYXRpbyBkZSBlbmRldWRhbWllbnRvDQpFeHRyYcOtZG8gZGUgbGEgdmlzdWFsaXphY2nDs24gZGUgTk9DJ3MgKHJlZikNCiQkIEVuZGV1ZGFtaWVudG8gPSBcZnJhY3tQYXNpdm99e1BhdHJpbW9uaW8gTmV0b30gJCQNCmBgYHtyfQ0Kbm9jc19kZiA9IGZyZWFkKCAgIi4uL3Jlc3VsdGFkb3MvY29tcGFyYWNpb25fcGFpc2VzL25vY3MuY3N2IikNCnBsdF9lbmRldSA8LSBub2NzX2RmICU+JSANCiAgZ2dwbG90KGFlcyh5ZWFyLCByYXRpb19lbmRldWRhbWllbnRvICxncm91cCA9IHllYXIpKSsNCiAgZ2VvbV9ib3hwbG90KCkgKw0KICAjIGdlb21fcG9pbnQoYWVzKGNvbG9yID0gY29tcGFueSkpKw0KICAjIGdlb21fbGluZShhZXMoZ3JvdXAgPSBjb21wYW55KSkrDQogIGdlb21fbGluZShkYXRhID0gbm9jc19kZiAlPiUgZmlsdGVyKGNvbXBhbnkgPT0gIlBEVlNBIiksIA0KICAgICAgICAgICAgYWVzKHllYXIsIHJhdGlvX2VuZGV1ZGFtaWVudG8sY29sb3IgPSAiUERWU0EiLCBncm91cCA9IGNvbXBhbnkpLCBzaXplID0gMSkrDQogIGdlb21fbGluZShkYXRhID0gbm9jc19kZiAlPiUgZmlsdGVyKGNvbXBhbnkgPT0gIllQRiIpLCANCiAgICAgICAgICAgIGFlcyh5ZWFyLCByYXRpb19lbmRldWRhbWllbnRvLGNvbG9yID0gIllQRiIsIGdyb3VwID0gY29tcGFueSksIHNpemUgPSAxKSsNCiAgc2NhbGVfY29sb3JfbWFudWFsKG5hbWUgPSAiRW1wcmVzYSIsIA0KICAgICAgICAgICAgICAgICAgICAgbGFiZWxzID0gYygiUERWU0EiLCAiWVBGIiksDQogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjKCAgImJyb3duNCIsICJibHVlMSIpKSsNCiAgICAgICAgICAgICAgICAgICAgICMgdmFsdWVzID0gYygiUERWU0EiID0gICJyZWQiLCAiWVBGIiA9ICJibHVlIikpKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIikrDQogIGxhYnModGl0bGUgPSAiUmF0aW8gZGUgZW5kZXVkYW1pZW50byBkZSBOT0MncyIsIHggPSAiIiwgeT0iIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJZUEYgeSBQRFZTQSBmcmVudGUgYWwgcmVzdG8gZGUgbGEgZGlzdHJpYnVjacOzbiIpKw0KICB5bGltKC0zLCA1ICkNCnBsdF9lbmRldSANCmBgYA0KDQoNCiMgUmVudGFiaWxpZGFkDQokJFRHX3toaWRyb2NhcmJ1cm9zfSA9IFxmcmFje1BWX3toaWRyb2NhcmJ1csOtZmVyYX19e0tUQV97aGlkcm9jYXJidXLDrWZlcm99fSQkDQoNCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQojbGV2YW50byBkYXRhIHNldHMgZGUgb3RybyBSIG1hcmtkb3duDQpiYWxhbmNlc19hcmcgPC0gcmVhZF9jc3YoIi4uL2RhdGEvYmFsYW5jZXMvYmFsYW5jZXNfYXJnLmNzdiIsIA0KICAgIGNvbF90eXBlcyA9IGNvbHMoZmVjaGEgPSBjb2xfZGF0ZShmb3JtYXQgPSAiJVktJW0tJWQiKSwgWDEgPSBjb2xfc2tpcCgpKSkNCg0KcGV0cm9icmFzX2FyZ19zZWdtZW50b3MgPC0gcmVhZF9jc3YoIi4uL2RhdGEvYmFsYW5jZXMvcGV0cm9icmFzX2FyZ19zZWdtZW50b3MuY3N2IiwgDQogICAgY29sX3R5cGVzID0gY29scyhYMSA9IGNvbF9za2lwKCkpKQ0KDQp5cGZfc2VnbWVudG9zIDwtIHJlYWRfY3N2KCIuLi9kYXRhL3lwZi95cGZfc2VnbWVudG9zLmNzdiIsIA0KICAgIGNvbF90eXBlcyA9IGNvbHMoWDEgPSBjb2xfc2tpcCgpKSkNCg0KYGBgDQoNCiMjIFRvdGFsDQpgYGB7cn0NCnRhc2FfZ2FuYW5jaWFfcmFtYV9zdG9jayA9IHJlYWRfZXhjZWwoIi4uL3Jlc3VsdGFkb3MvYXJnZW50aW5hL3JlbnRhX2RlX2xhX3RpZXJyYV9oaWRyb2NhcmJ1cmlmZXJhX2FyZy54bHN4Iiwgc2hlZXQgPSAidGdfcGdfdG90YWwiKQ0KIyB0YXNhIGRlIGdhbmFuY2lhDQpncmFmX3RnX3JhbWFfMiA8LSB0YXNhX2dhbmFuY2lhX3JhbWFfc3RvY2sgJT4lDQogIGZpbHRlcihhbmlvID4xOTk1KSAlPiUNCiAgZ2dwbG90KGFlcyhhbmlvLCBUR19wZywgY29sb3IgPSBzdG9ja19zZWxlY2Npb25hZG8pKSsNCiAgZ2VvbV9saW5lKGFlcyhhbmlvLCBUR19tYW51ZikpKw0KICBnZW9tX2xpbmUoYWxwaGEgPSAwLjUpKw0KICBnZW9tX3BvaW50KCkrDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSwNCiAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpDQoNCnBsb3RfZ2dwbG90bHkoZ3JhZl90Z19yYW1hXzIgLCANCiAgICAgICAgICAgICAgdGl0bGUgPSAiVGFzYSBkZSBnYW5hbmNpYSBoaWRyb2NhcmJ1csOtZmVyYSBjb24gUFB5RSBhIHBhcnRpciBkZSBzdG9jayBkZSBwb3pvcyAoMTk2MCAtIDIwMTgpIikNCmBgYA0KDQoNCiMjIFBvciBzdWJzZWN0b3INCmBgYHtyfQ0KdGdfeF9zZWN0b3IgPSBiYWxhbmNlc19hcmcgJT4lDQogICMgZmlsdGVyKHVuaWRhZCA9PSAiTWlsbG9uZXMgZGUgcGVzb3MiKSAlPiUNCiAgZmlsdGVyKHVuaWRhZCA9PSAiTWlsbG9uZXMgZGUgcGVzb3MiKSAlPiUNCiAgZ3JvdXBfYnkoZmVjaGEsIHNlY3RvcikgJT4lDQogIHN1bW1hcmlzZSgiVEcgYW50ZXMgZGUgaW1wdWVzdG9zIiA9IHN1bShnY2lhX2FudCxuYS5ybSA9IFQpL3N1bSAoS1RBLG5hLnJtID0gVCksDQogICAgICAgICAiVEcgZGVzcHVlcyBkZSBpbXB1ZXN0b3MiID0gc3VtKGdjaWFfYW50LCBpbXB1ZXN0b19nY2lhLCBuYS5ybSA9IFQpL3N1bShLVEEsIG5hLnJtID0gVCApICkgJT4lDQogIGdhdGhlcihrZXkgPSB2YXJpYWJsZSwgdmFsdWUgPSB2YWxvciwgMzo0KSAlPiUNCiAgZmlsdGVyKHZhcmlhYmxlID09IlRHIGRlc3B1ZXMgZGUgaW1wdWVzdG9zIikgJT4lDQogIGdncGxvdChhZXMoZmVjaGEsIHZhbG9yLCBjb2xvciA9IHNlY3RvcikpKw0KICBnZW9tX2xpbmUoKSsNCiAgZ2VvbV9wb2ludCgpKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwKSsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkrDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTApKSsNCiAgZmFjZXRfd3JhcCh+dmFyaWFibGUpDQoNCnBsb3RfZ2dwbG90bHkodGdfeF9zZWN0b3IsdGl0bGUgPSAiVGFzYSBkZSBnYW5hbmNpYSBlbXByZXNhcyBoaWRyb2NhcmJ1cm9zIiwNCiAgICAgICBzdWJ0aXRsZSA9ICAiQW50ZXMgeSBkZXNwdcOpcyBkZSBpbXB1ZXN0b3MiICkNCmBgYA0KIyMjIFNlZ21lbnRvcyBZUEYgeSBQZXRyb2JyYXMNCmBgYHtyIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpncmFmX3RnX3lwZiA8LSB5cGZfc2VnICU+JQ0KICAjIGZpbHRlcihzZWN0b3IgJWluJSBjKCJxdWltaWNhIiwgImRvd25zdHJlYW0iLCAidXBzdHJlYW0iKSkgJT4lDQogIGZpbHRlcihzZWN0b3IgIT0gImFkbV9jZW50cmFsIikgJT4lDQogIGdncGxvdChhZXMoZmVjaGEsIHRnX2FjdGl2bywgY29sb3IgPSBzZWN0b3IpKSsNCiAgZ2VvbV9saW5lKCkrDQogIGdlb21fcG9pbnQoKSsNCiAgIyBmYWNldF93cmFwKH5zZWN0b3IpKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50KSsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCkpKw0KICBsYWJzKHRpdGxlID0gIlRhc2EgZGUgZ2FuYW5jaWEgZGUgc2VnbWVudG9zIFlQRiIpDQpncmFmX3RnX3lwZg0KYGBgDQpgYGB7cn0NCmdyYWZfdGdfcGV0cm9icmFzIDwtIHBldHJvYnJhc19hcl9zZWcgJT4lDQogIGZpbHRlcihzZWN0b3IgJWluJSBjKCJwZXRyb3F1aW1pY2EiLCAiZG93bnN0cmVhbSIsICJ1cHN0cmVhbSIsICJnYXNfeV9lbmVyZ2lhIikpICU+JQ0KICAjIGZpbHRlcihzZWN0b3IgIT0gImFkbV9jZW50cmFsIikgJT4lDQogIGdncGxvdChhZXMoZmVjaGEsIHRnLCBjb2xvciA9IHNlY3RvcikpKw0KICBnZW9tX2xpbmUoKSsNCiAgIyBmYWNldF93cmFwKH5zZWN0b3IpKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50KSsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCkpKw0KICBsYWJzKHRpdGxlID0gIlRhc2EgZGUgZ2FuYW5jaWEgZGUgc2VnbWVudG9zIFBldHJvYnJhcyBBcmdlbnRpbmEiKQ0KZ3JhZl90Z19wZXRyb2JyYXMNCmBgYA0KDQoNCiMjIFBvciBlbXByZXNhDQpgYGB7ciBlY2hvPUZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KZ3JhZl90Z19lbXAgPC0gYmFsYW5jZXNfYXJnICU+JQ0KICBmaWx0ZXIodGdfYW50ICE9IEluZikgJT4lDQogIGdncGxvdChhZXMoZmVjaGEsIHRnX2FudCwgY29sb3IgPSBlbXByZXNhKSkrDQogIGdlb21fbGluZSgpKw0KICBnZW9tX3BvaW50KCkrDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnQpKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwKSkrDQogIGZhY2V0X3dyYXAofnNlY3RvcikNCg0KcGxvdF9nZ3Bsb3RseShncmFmX3RnX2VtcCwgdGl0bGUgPSAiVGFzYSBkZSBnYW5hbmNpYSBlbXByZXNhcyBoaWRyb2NhcmJ1cm9zIiwNCiAgICAgICBzdWJ0aXRsZSA9ICAiQW50ZXMgZGUgaW1wdWVzdG9zIikNCmBgYA0KDQo=